查看原文
其他

SoK: Hardware-supported Trusted Execution Environments

EdisonE3 COMPASS Lab 2022-09-24

SoK: Hardware-supported Trusted Execution Environments

今天分享的paper是《SoK: Hardware-supported Trusted Execution Environments》。该篇文章目前是预印本,已发布在arxiv上。文章作者为来自苏黎世联邦理工学院的Moritz Schneider等人。


1. Introduction

近年来,为了避免设备上的敏感数据泄露,可行执行环境(TEE)逐渐被大家所采用。在这篇文章中,作者对TEE设计中实现安全目标的机制进行了系统化分析。这些机制包括可验证启动(Verifiable Launch)、运行时隔离(Run-Time Isolation)、可信IO(Trusted IO)和安全储存(Secure Storage)。通过对近年来出现在工业界的和学术界中的硬件辅助的TEE进行分析,作者发现尽管TEE在目标、使用场景和指令集架构方面存在诸多差异,但它们在设计方面都有许多共同之处。

2. System and Adversary Model

TEE为enclave提供了广泛的安全保护,以应对不同的攻击。这些攻击大致可以分为以下几类:

1.Co-located enclave adversary:当平台支持运行多个enclave时,攻击者可以通过启动一个或多个enclave来发动攻击。该类攻击者用符号Atee来表示。2.Unprivileged software adversary:攻击者在和enclave相同的平台上使用非特权软件或者说特权等级不高于enclave的软件来发动攻击。该类攻击者用符号Aapp来表示3.System software adversary:攻击能够通过控制系统管理软件,例如操作系统,来进行攻击。该类攻击者用符号Assm来表示。4.Startup adversary:攻击者通过修改系统参数例如内存或者IO的参数配置,从而控制系统引导来实现攻击。该类攻击者用符号Aboot来表示。5.Peripheral adversary:攻击者通过使用包含恶意固件的外设,从而实现访问或者修改enclave中的内存。该类攻击者用符号Aper来表示。6.Fabric adversary:攻击者通过控制总线,从而实现中间人攻击或者访问内存中的数据。该类攻击者用符号Abus来表示。7.Invasive adversary:攻击者通过入侵攻击,例如操纵时钟信号或是修改电压来引发故障,从而达到提取机密数据或者修改程序执行路径的目的。该类攻击者用符号Ainv来表示。

下图所示为TEE的系统模型与攻击者模型:



3. Verifiable Launch

在实际执行enclave之前,需要通过对启动过程进行验证来确保enclave所处的执行环境得到了正确的配置,其初始状态符合预期。验证过程从Root-of-Trust for Measurement (RTM)开始。RTM可以分为static (SRTM),dynamic (DRTM)以及hardware based (HW)。SRTM由一条完整的信任链来实现,该信任链中的代码在系统启动时执行。通过这种方法,系统的TCB能够在不受信任的组件例如AteeAappAsswAper启动之前进行执行。常见的SRTM通常由BootROM中的硬件或者不会被修改的软件来实现。与SRTM相反,DRTM能够在系统启动之后建立RTM。该类RTM常常通过专门的硬件指令来完成。这些指令首先挂起所有其他活动进程并禁用所有IO设备和中断,然后由硬件加载并验证enclave所需的TCB的签名。



在enclave启动之后,常常还会对验证enclave是否有被正确启动以及初始状态是否符合预期。这样的过程被称为认证 (Attestation)。认证可以分为两种,分别是远程认证 (Remote Attestation)和本地认证 (Local Attestation)。当验证者与enclave位于同一平台上时,可使用本地认证。与之相反,远程认证主要用于与被认证enclave不在同一平台上的远程验证者使用。远程认证通常使用非对称加密,并且通常需要检查一个或多个证书链。而本地认证则使用对称加密,效率相较于远程认证更高。

4. Run-Time Isolation

作者通过分析不同TEE对资源的划分以及隔离机制的实现,从而对它们的隔离策略进行了分类。

从资源划分的角度出发,可以将隔离策略分为三类:

1.按时间划分:该类TEE在时域中对资源进行划分,确保在任意时间点,单个执行程序独占对资源的访问权。2.按空间划分:如果一份资源有多个副本或者一份资源能够被均分为多份更小的资源,那么可以按空间将该资源进行划分,使得受信任的程序和不受信任的程序分别使用该资源的一部分。3.综合空间和时间进行划分:综合考虑时间和空间因素对资源进行划分。例如一份资源可以在空间上进行划分,但这些划分出来的资源块可能会随着时间的推移而变化。

从隔离机制的实现的角度出发,可以将隔离策略分为以下两类:

1.逻辑隔离:逻辑隔离通过访问控制器来禁止对受保护数据的非法访问。对于每次访问,访问控制器通过访问控制信息来判断这次访问是否合法。如果不合法,则禁止其对资源进行访问。访问控制信息由系统中受信任的组件生成并管理,部分TEE可以在运行时对这部分信息进行修改,从而实现资源的重新分配。2.加密隔离:使用加密隔离时,通过加密实现数据的保密性,只有拥有正确密钥的访问者才能正确地对数据进行解密。而数据的完整性则通过数据中加密的消息验证码(Message Authentication Code)来实现。

对于CPU,从资源划分的角度出发,现有的TEE方案基本上都选择在时域上进行划分,而在隔离机制的实现上,现有TEE则都采用逻辑隔离。通过这两种方式进行结合,能够避免加密带来的时间开销,同时能够实现快速安全的上下文切换。为了支持这样的隔离方式,TEE通常会引入新的CPU模式(如下图所示),并由在高级权限中运行的固件来负责上下文切换。

在CPU的隔离策略的选择上,不同TEE都采取了按时划分和逻辑隔离。然而对于内存的隔离策略,基于所考虑的攻击者模型的不同,不同TEE的选择也有所不同。

从资源划分的角度出发:

1.在空间上对内存进行划分:这种策略会在系统启动前,从内存中划分出一个或多个区域,供enclave以及TCB独占使用直到下次系统重启。这种策略的缺点在于内存资源是静态分配的且内存保护的粒度较粗。2.在时间上对内存进行划分:这种策略仅允许当前允许的程序对内存进行访问,在上下文进行切换时对内存中的内容进行切换与保存。对于支持并发enclave的TEE而言,这种策略并不合适。除此之外,上下文切换时将内存保存到磁盘以及从磁盘中加载数据到内存需要花费大量的时间。因此很少有TEE选择这种方案。3.综合时间和空间对内存进行划分:这种策略采取的方式是随着时间的推移,将内存区域重新分配给不同的程序。这种方式相较于前两种更灵活。

从隔离机制的实现的角度出发:

1.逻辑隔离:对每次内存访问进行检查,以避免非法访问。2.加密隔离:通过加密实现机密性以及通过加密消息验证码实现完整性。

在实际中,TEE可能会同时采取多种不同的策略来保护内存。例如Intel SGX使用时间空间相结合的划分以及逻辑隔离来保护enclave中的内存,但对于TCB的内存,则采用完全基于空间的划分来进行保护。

为了支持对内存访问的控制,TEE通常会使用内存保护单元(MPU)或者内存管理单元(MMU)。MPU和MMU的主要区别在于前者对物理地址进行处理而后者对虚拟地址进行处理。此外,MPU通常支持的规则数量有限,而MMU则更加灵活。

5. Trusted IO

可信IO由两个重要部分组成:

1.enclave访问设备的机密性和完整性,即建立可信路径2.通过受信任的设备体系结构保护设备上enclave中的数据。

逻辑隔离和加密隔离都可以用来建立可信路径。这两者建立的可信路径都能避免AteeAappAsswAperAboot来的攻击,但只有加密隔离能够避免Abus带来的攻击。通过逻辑隔离建立可信路径需要处理两种类型的IO交互:直接内存访问(DMA)和内存映射IO(MMIO)。为了处理IO交互,一种方法是通过访问控制过滤器,该过滤器基于IO请求的源与目标来允许或是拒绝访问。另一种方式则是通过配置MPU或相关元数据,在每次enclave对设备进行访问时进行检查。至于加密隔离,则是给设备与enclave提供凭证与加密密钥,通过身份验证的方式来建立可信路径。

对于某些可信IO而言,只需要建立从enclave到设备的可信路径即可,例如网卡。但是对于另外的一些设备,它们被用来处理用户数据,例如NPU。这类设备被称为加速器。这些加速器必须像CPU一样确保每个enclave数据的机密性和完整性。为了实现这个目标,有以下几种方法:

1.按空间划分:在平台的整个生命周期内,加速器一次只分配给某个特定的enclave。这种方式虽然理论上可行,但实际中却很少用到,因为如果有这种需求,那么只需要建立从enclave到设备的可信路径即可。2.按时间划分:加速器在任何给定时间由单个程序独占使用。为了达成这一条件,需要一种安全的上下文切换机制。这一需求既可以通过软件实现也可以由加速器硬件本身实现。3.综合时间空间进行划分并进行逻辑隔离:这种策略通过维护访问控制信息以跟踪资源的所有权,将资源映射到对应的enclave。该策略通常用于支持多个enclave同时访问加速器。

6 Secure Storage

在许多应用程序中,需要enclave在不同的调用中保持特定的状态。通过加密以这种方式保护数据的过程称为密封,而通过解密的方式加载enclave状态的过程称为解封。

作者发现所有TEE采取密封的方案都与基于TPM的原始方案类似。通常采取生成非对称密钥的方式来进行加密。在解密之前,会对系统配置进行验证,如果系统配置和进行密封时的配置一致,那么就会使用密钥进行解密。如果需要密封的数据量较大,TPM无法完全容纳,则会生成对称密钥将数据进行加密,然后用密封的方式将密钥存入TPM中。

为了支持密封,部分TEE例如Keystone等,采用软件的方式来提供支持。而另外一些TEE例如Intel SGX则通过提供特殊的CPU指令来实现密封。这些指令基于不同类型的绑定来完成生成与访问密钥。

7 TCB Discussion

一般来说,TCB的大小由其代码行数决定,代码行数越多,TCB越大。但通过对TEE的TCB进行分析,作者发现并非所有TEE的TCB都提供了其代码行数的具体数字,因为一些TEE的TCB并不是开源的。因此作者在讨论TCB的大小时,将其划分为两类:大小可变的组件与大小不可变的组件。通常而言,大小可变的组件通常通常由软件实现而不可变的部分则由硬件实现。当然,也存在一些例外,例如BootROM中的软件部分是不可变的。各个TEE的具体情况如下表所示(其中I表示大小不可变,M表示大小可变,U表示未知,-表示该TEE不支持该组件):



8 Conclusion

这篇文章首先描述了包含软件和硬件攻击者在内的威胁模型。在进行TEE设计时,安全机制的选择往往取决于所保护的资源类型与考虑的威胁模型。之后对工业界和学术界中的TEE如何实现可验证启动,运行时隔离,可信IO以及安全储存进行了分析。作者发现虽然一些方案表面上看起来是不一样的,但隐藏在背后的设计思路其实是一致的。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存